// 防抖
export default function debounce(fn, delay, immediate = false, resutCallback) {
      //定义一个空的timer
      let timer = null
      //定义变量判断是否执行过
      let isInvoke = false
      //真正执行的函数
      const _debounce = function (...args) {
          return new Promise((resolve,reject)=>{
              //取消上一次的定时器
          if (timer) clearTimeout(timer)
          
          //判断是否需要立即执行
          if (immediate && !isInvoke) {
              const result = fn.apply(this, args)
              if (resutCallback) resutCallback(result)
              resolve(result)
              isInvoke = true
          }
          // 设置定时器,延迟执行
          timer = setTimeout(() => {
              //获取到当前方法的this，以及相关参数，例如event
              const result = fn.apply(this, args)
              if (resutCallback) resutCallback(result)
              resolve(result)
              isInvoke = false
          }, delay)
          })
      }
      //终止延迟，取消功能。    使用方法：在外部调用返回方法的cancle()即可
      _debounce.cancle = function () {
          if (timer) clearTimerout(timer)
          timer = null
          isInvoke = false
      }
      return _debounce
  }